﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kaskelot.Services.Model;

namespace Stockholm.SOA.Kaskelot.WCF.ServiceImplementation.Mapping
{
	public static class ByggnadExtensions
	{
		public static DataContracts.Byggnad ToContract(this Byggnad entity)
		{
			DataContracts.Byggnad b = new DataContracts.Byggnad();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static DataContracts.Byggnad ToMinimalContract(this Byggnad entity)
		{
			DataContracts.Byggnad b = new DataContracts.Byggnad();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static Byggnad ToEntity(this DataContracts.Byggnad b)
		{
			Byggnad entity = new Byggnad();

			CopyToEntity(b, entity);

			return entity;
		}

		public static void UpdateEntity(this Byggnad entity, DataContracts.Byggnad byggnad)
		{
			CopyToEntity(byggnad, entity);
		}

		private static void CopyFromEntity(Byggnad from, DataContracts.Byggnad to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Namn = from.Benamning;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.BesokAdress = from.BesokAdress;
			to.BesokPostNr = from.BesokPostNr;
			to.BesokPostOrt = from.BesokPostOrt;

			to.LeveransAdress = from.LeveransAdress;
			to.LeveransPostNr = from.LeveransPostNr;
			to.LeveransPostOrt = from.LeveransPostOrt;

			to.Fritext = from.Fritext;
			to.InformatorKravs = from.InformatorKravs;
			to.KanExpandera = from.KanExpandera;
			to.Koordinater = from.Koordinater;
			to.Inaktiv = from.Inaktiv;

			to.TypId = from.TypId;
			to.StadsdelId = from.StadsdelId;
			to.DocumentFolderId = from.DocumentFolderId;

			to.TelNr = from.TelNr;
			to.Hemsida = from.Hemsida;
			to.Epost = from.Epost;
			
			if (from.ByggnadTyp != null)
				to.TypNamn = from.ByggnadTyp.Benamning;

			if (from.Stadsdel != null)
				to.StadsdelNamn = from.Stadsdel.Benamning;

			if (minimal) return;

			if (from.Lokal != null)
			{
				to.Lokaler = new List<DataContracts.Lokal>();
				foreach (Lokal l in from.Lokal)
				{
					to.Lokaler.Add(l.ToMinimalContract());
				}
			}
		}

		private static void CopyToEntity(DataContracts.Byggnad from, Byggnad to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Benamning = from.Namn;
			to.Inaktiv = from.Inaktiv;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.BesokAdress = from.BesokAdress;
			to.BesokPostNr = from.BesokPostNr;
			to.BesokPostOrt = from.BesokPostOrt;

			to.LeveransAdress = from.LeveransAdress;
			to.LeveransPostNr = from.LeveransPostNr;
			to.LeveransPostOrt = from.LeveransPostOrt;

			to.TypId = from.TypId;
			to.StadsdelId = from.StadsdelId;

			to.Fritext = from.Fritext;
			to.InformatorKravs = from.InformatorKravs;
			to.KanExpandera = from.KanExpandera;
			to.Koordinater = from.Koordinater;

			to.DocumentFolderId = from.DocumentFolderId;
			to.TelNr = from.TelNr;
			to.Hemsida = from.Hemsida;
			to.Epost = from.Epost;
		}
	}
}
